"""
name = 'studentSystem'
datetime ='2020/11/24 20:28'

❣ฅ(▼▾▼)ฅ

# -*-encoding = UTF-8-*-
"""

"""
1、创建一个对象后默认调用(A)
A、__init__    B、__str__    C、__add__    D、__and__
2、类是对象的 模板、对象是类的 实例 .
3、对象是由 属性、方法 两部分构成.
4、创建学生类：
类名：Student
属性：name（姓名）、age（年龄）、sex（性别） 
方法：
def info(self) # 打印学生的姓名、年龄、性别
def draw(self) #打印”XX会画画呢”
描述：创建学生类，通过学生类创建一个学生对象，分别调用学生的info方法.
"""

#
# class Student(object):
#     # 定义一个学生类
#     def __init__(self, name, age, sex):
#         # 初始化变量 name（姓名）、age（年龄）、sex（性别）
#         self.name = name
#         self.age = age
#         self.sex = sex
#
#     def info(self):
#         print("姓名：%s，年龄：%d岁，性别：%s" % (self.name, self.age, self.sex))
#
#     def draw(self):
#         print("%s会画画呢！" % self.name)
#
#
# lily = Student("Lily", 12, "女")
# lily.info()
# lily.draw()

"""
5、创建动物类：
类名：animal
属性(使用魔法方法实现)：name（姓名）、age（年龄）、color（颜色） 
方法：
def info(self) # 打印姓名、年龄、毛颜色
def run（self）#打印“XX会跑呢”
描述：创建动物类，通过动物类创建一个动物对象，分别调用动物的info和run方法.
"""


# class animal(object):
#
#     def __init__(self, name, age, color):
#         self.name = name
#         self.age = age
#         self.color = color
#
#     def info(self):
#         print("姓名：%s，年龄：%d岁，毛色：%s" % (self.name, self.age, self.color))
#
#     def run(self):
#         print("%s会跑呢" % self.name)


"""
1、下列程序结果是 初始化、类A、销毁.
class A:

    def __init__(self):
        print("初始化")

    def __del__(self):
        print("销毁")

    def __str__(self):
        return "类A"
a = A()
print(a)

2. 下列程序执行结果 动物在叫、汪汪汪.
class Animal(object):

    def shut(self):
        print("动物在叫")
class Dog(Animal):

    def shut(self):
        super().shut()
        print("汪汪汪")
dog = Dog()
dog.shut()

3. 创建猫类：
类名：Cat
属性：无
描述：创建一个Cat类，通过Cat类创建一个对象cat，执行print(cat)输出“喵？喵？喵？”.
"""


# class Cat(object):
#     print("喵？喵？喵？")
#
#
# print(Cat)

"""
4.创建计算器类：
类名：Calculator
属性：number_1（数字一）、number_2（数字二） 
方法：
def __init__(self,number_1,number_2): 
# 类的初始化方法
def add(self) # 返回数字一加数字二的值 
def sub(self) # 返回数字一减去数字二的值
def div(self) # 返回数字一除以数字二的值
def mul(self) # 返回数字一乘以数字二的值
描述：创建计算器类，通过计算器类创建一个计算器对象，在创建对象时需要传入数字一和数字二，分别调用计算器的四种方法.
"""


# class Calculator(object):
#
#     def __init__(self, number_1, number_2):
#         self.number_1 = number_1
#         self.number_2 = number_2
#
#     def add(self):  # 返回数字一加数字二的值
#         return self.number_1 + self.number_2
#
#     def sub(self):  # 返回数字一减去数字二的值
#         return self.number_1 - self.number_2
#
#     def div(self):  # 返回数字一除以数字二的值
#         return self.number_1 / self.number_2
#
#     def mul(self):  # 返回数字一乘以数字二的值
#         return self.number_1 * self.number_2
#
#
# ca = Calculator(1, 2)
# print(ca.add())
# print(ca.sub())
# print(ca.div())
# print(ca.mul())

"""
5.创建Cat和Dog类分别继承Animal类，分别重写shut和eat方法，创建Cat类对象cat和Dog类对象dog，分别调用cat和dog的shut和eat方法
class Animal:
    def shut(self):
		# 打印叫声
        pass

    def eat(self):
		# 打印爱吃的食物
        pass

"""


class Animal:

    def shut(self):  # 打印叫声
        pass

    def eat(self):  # 打印爱吃的食物
        pass


class Dog(Animal):

    def shut(self):
        print("汪汪汪...")

    def eat(self):
        print("爱吃骨头")


class Cat(Animal):

    def shut(self):
        print("喵喵喵...")

    def eat(self):
        print("爱吃鱼")


dog = Dog()
dog.shut()
dog.eat()

cat = Cat()
cat.shut()
cat.eat()


"""
1、	面向对象三大特性是 封装、继承、多态 .
2、	单例模式创建保证实例只创建 1 次.
"""
